# 1. 获取上次配置文件
data=/home/data
old_ver_file=$(ls -lrt ${data}/version | tail -n 1 | awk '{print $NF}')

# 2. 下载更新包# (version=13F)
ARG=true
while $ARG; do
    # 2. 下载更新包
    echo "从存储库中获取的上一个版本号文件: ${old_ver_file}"
    read -p "请输入需要需要更新到的版本号:" version
    status_code=$(curl -I -m 1 -o  /dev/null -s -w %{http_code} ftp://ftp.hc-yun.com/mango-war/${version}/ --user mgftp:zaq1@WSX)
    if [[ "$status_code" -eq 250 ]]; then
        echo "你输入的版本资源存在准备开始下载包."
        ARG=false
    else
        echo "你输入的版本资源不存在请上传更新包资源后再执行此脚本."
    fi
done

# 清理缓存
# rm -rf ${data}/version/${version}* /tmp/tmp.*

# 创建临时目录
tmp_dir=$(mktemp -d)
cp ${data}/version/${old_ver_file} ${tmp_dir}
cp ${tmp_dir}/${old_ver_file} ${tmp_dir}/${version}.txt

# 下载更新包
mkdir -p $data/$version && cd $_
wget -r -np -nH -c -R index.html  ftp://ftp.hc-yun.com/mango-war/${version}/ --user mgftp --password zaq1@WSX
mv $data/$version/mango-war/$version/* $data/$version
rm -rf /home/data/$version/mango-war

# 3. 获取新包版本
# 获取包版本函数 && 生成新版本号文件
function get_version () {
    base_dir="$1"
    for file in $(ls ${base_dir} | egrep 'jar$|war$|web.*zip$'); do
        ver=$(echo $file | awk -F '-' '{print $NF}')
        name=$(echo $file | sed "s#-$ver##" | sed 's#-#_#g')
        # 替换版本号(或者增加到版本号文件)
        if grep -qr "^${name}" ${tmp_dir}/${version}.txt ; then
            sed -i "s#^${name}=.*#${name}=${file}#" ${tmp_dir}/${version}.txt
        else
            echo "${name}=${file}" >> ${tmp_dir}/${version}.txt
        fi
        echo "${name}=${file}"
    done
}

# 获取新包版本 输出到update版本号文件
[ -f "$data/version/${version}_update.txt" ] && rm -f $data/version/${version}_update.txt
get_version $data/$version | tee -a $data/version/${version}_update.txt
/usr/bin/cp ${tmp_dir}/${version}.txt $data/version/${version}.txt
grep -vxFf ${tmp_dir}/${old_ver_file} ${tmp_dir}/${version}.txt > ${tmp_dir}/${old_ver_file}_diff_${version}.txt
diff ${tmp_dir}/${old_ver_file}_diff_${version}.txt $data/version/${version}_update.txt 

# 4. 复制更新包到 运行目录
function copy_package () {
    run_dir=$2
    package_dir="$1"
    for file in $(ls ${package_dir} | egrep 'jar$|war$|zip$'); do
        ver=$(echo $file | awk -F '-' '{print $NF}')
        name=$(echo $file | sed "s#-$ver##" | sed 's#-#_#g')
        case $name in
            calc_root)
                _dir=calcroot
                ;;
            calc_task)
                _dir=calctask
                ;;
            data_analysis)
                _dir=data-analysis
                ;;
            alarm_task)
                _dir=alarm-task
                ;;
            jhipster_registry)
                _dir=registry
                ;;
            backstage_web)
                _dir=backstage-web
                ;;
            preprocess)
                _dir=preprocess
                echo "$version    # $(date '+%F %T')" >> ${run_dir}/${_dir}/version
                ;;
            ampla_api_source)
                _dir=ampla
                ;;
            xjar_agent_hibernate)
                _dir=xjar-agent-hibernate
                ;;
            *)
                _dir=$name
                ;;
        esac

        if [ ! -f "${package_dir}/${file}" ]; then
            echo "[Error] ${package_dir}/${file} 文件不存在."
            sleep 200
            exit 1
        fi

        # 存在对应目录copy包到对应目录 否则copy到 other目录
        if [ ! -d "${run_dir}/${_dir}" ]; then
            echo "[Error] ${package_dir}/${file} 文件无法识别 已经copy到 ${run_dir}/other/${file}."
            [ -d "${run_dir}/other" ] || mkdir -p ${run_dir}/other
            /usr/bin/cp ${package_dir}/${file} ${run_dir}/other/
        else
            echo "copy ${package_dir}/${file} ---> ${run_dir}/${_dir}/"
            /usr/bin/cp ${package_dir}/${file} ${run_dir}/${_dir}/
        fi
    done
}

# 调用函数      新包路径      运行/存储 路径
copy_package $data/$version $data/mango